package com.cloud_notes.demo.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cloud_notes.demo.common.pojo.dataobject.BlogInfo;
import com.cloud_notes.demo.common.pojo.response.BlogDetailsInfoResponse;
import com.cloud_notes.demo.common.pojo.response.BlogInfoResponse;
import com.cloud_notes.demo.mapper.BlogInfoMapper;
import com.cloud_notes.demo.service.BlogService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class BlogServiceImpl implements BlogService {

    @Autowired
    private BlogInfoMapper blogInfoMapper;

    //接口具体实现，下面由于用到两张表的数据，因此MybatisPlus中不支持多张表查询，因此使用的是sql语句编写
    @Override
    public List<BlogInfoResponse> getList() {
//        //查询数据库：使用MybatisPlus
//        List<BlogInfo> blogInfos = blogInfoMapper.selectList(new LambdaQueryWrapper<BlogInfo>().eq(BlogInfo::getDeleteFlag,0)
//                .orderByDesc(BlogInfo::getId));
//        //类型转换，即把查询的数据赋值给返回类型中的属性中去，可以使用set方法一个一个赋值，也有方法直接调用
//        List<BlogInfoResponse> blogInfoResponses =
//                blogInfos.stream().map(blogInfo -> {
//                    BlogInfoResponse response = new BlogInfoResponse();
//                    BeanUtils.copyProperties(blogInfo, response);
//                    return response;
//                }).collect(Collectors.toList());
//        return blogInfoResponses;

        //直接使用原始的sql语句
        return blogInfoMapper.selectBlogDetails();
    }

    //根据id返回对应的详细信息
    @Override
    public BlogDetailsInfoResponse getBlogDetails(Integer blogId) {
        //根据id查询
        BlogInfo blogInfo = blogInfoMapper.selectOne(new LambdaQueryWrapper<BlogInfo>()
                .eq(BlogInfo::getId,blogId).eq(BlogInfo::getDeleteFlag,0));
        //类型转换
        BlogDetailsInfoResponse blogDetailsInfoResponse = new BlogDetailsInfoResponse();
        if(blogInfo != null)
        {
            BeanUtils.copyProperties(blogInfo,blogDetailsInfoResponse);
        }
        return blogDetailsInfoResponse;
    }
}
